package com.sprouting.ops.interfaces;

import com.sprouting.ops.model.OpsComputerServer;

import java.util.HashMap;
import java.util.Map;

/**
 * 基础常量
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2023/11/4 14:04
 */
public interface ConstantBase {


    /**
     * 基础常量
     */
    interface Base {
        /**
         * 公共的盘符，用 File.separator 在不同系统间解析有异常，用 \\ 会在windows上解析异常
         */
        String DISK_SYMBOL = "/";
        /**
         * 默认的桶名称
         */
        String BUCKET_NAME = "asset";

    }

    /**
     * 默认值
     */
    interface DefaultValue {
        /**
         * 默认的数值，这个参数主要是给数据库的默认值，数据库数据为null的时候优化效果不好
         */
        String STRING = "-1";
        /**
         * 默认的数值，这个参数主要是给数据库的默认值，数据库数据为null的时候优化效果不好
         */
        Integer INT = -1;
        /**
         * 默认只
         */
        String DEFAULT = "DEFAULT";
        /**
         * 初始值
         */
        Long INIT_LONG = 1L;
        /**
         * 默认的排序
         */
        Double SORT = 99.0;
        /**
         * 第一个开始的排序
         */
        Double SORT_INIT = 1d;
        /**
         * 封装的数据内置数据都是这个开头的
         */
        String BUILT_DATA = "__";
        /**
         * 系统自动操作用户
         */
        String SYS_USER = "sys";
        /**
         * 常用的时间格式化
         */
        String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
        /**
         * 时区
         */
        String TIME_ZONE_DEFAULT = "GMT+8";
    }

    /**
     * 排序
     */
    interface Order {
        /**
         * 升序
         */
        String ORDER_ASC = "asc";
        /**
         * 降序
         */
        String ORDER_DESC = "desc";
    }

    /**
     * 数据有效性
     */
    interface DelType {
        /**
         * 新增，有效的
         */
        Integer ADD = 0;
        /**
         * 已逻辑删除
         */
        Integer DEL = 1;
    }

    /**
     * 编码类型
     */
    interface Encoded {
        /**
         * 编码类型 - utf-8 默认
         */
        String UTF = "UTF-8";
        /**
         * 编码类型 iso-8859-1
         */
        String ISO_8859_1 = "ISO-8859-1";
        /**
         * GBK
         */
        String GBK = "GBK";
    }

    /**
     * 是否基础数据
     */
    interface BaseData {
        /**
         * 不是
         */
        Integer NO = 1;
        /**
         * 是基础数据，可以修改，不可删除
         */
        Integer YES = 2;
        /**
         * 是基础数据 - 不可以修改，不可以删除
         */
        Integer YES_BASE = 3;
    }


    /**
     * 是、否
     */
    interface YesOrNo {
        /**
         * 不是, false
         */
        Integer NO = 0;
        /**
         * 是, true
         */
        Integer YES = 1;
    }


    /**
     * 日志记录的类型
     */
    interface LogType{
        /**
         * 未知，默认
         */
        Integer UNKNOWN = 1;
        /**
         * 删除
         */
        Integer DELETE = 2;
        /**
         * 查询
         */
        Integer SELECT = 3;
        /**
         * 更新
         */
        Integer UPDATE = 4;
        /**
         * 插入
         */
        Integer INSERT = 5;
        /**
         * 无法定义，比如又有插入又有更新等
         */
        Integer UNDEFINED = 6;
    }

    /**
     * 日志记录的级别
     */
    interface LogLevel {
        /**
         * 最普通日志，细节级别
         */
        Integer DEBUG = 1;
        /**
         * 正常记录，预期执行正常事件
         */
        Integer INFO = 2;
        /**
         * 有一些不太正常的事件正在发生，但还可以继续执行的事件
         */
        Integer WARN = 3;
        /**
         * 出现严重问题，已经出现非预期的事件
         */
        Integer ERROR = 4;
        /**
         * 致命级别的事件，已经会导致整个系统不可运行
         */
        Integer CRITICAL = 5;
    }

    /**
     * 权限类型
     */
    interface AuthorityType {
        /**
         * 菜单
         */
        Integer MENU = 1;
        /**
         * 按钮
         */
        Integer BUTTON = 2;
        /**
         * 页面
         */
        Integer PAGE = 3;
        /**
         * 链接
         */
        Integer URL = 4;
        /**
         * 其他
         */
        Integer OTHER = 9;
    }

    /**
     * 性别
     */
    interface Sex {
        /**
         * 女性
         */
        Integer WOMEN = 0;
        /**
         * 男性
         */
        Integer MEN = 1;
        /**
         * 未知
         */
        Integer UNKNOWN = 9;
    }

    /**
     * 用户状态
     */
    interface UserStatus {
        /**
         * 在职，正常用户
         */
        Integer ACTIVATE = 1;
        /**
         * 停用，用户可能不稳定，但还在职，将他的权限进行剥离，该用户也不允许上线
         */
        Integer STOP = 2;
        /**
         * 已离职
         */
        Integer DEPART = 3;
    }

    /**
     * 登录类型
     */
    interface LoginType {
        /**
         * 电脑
         */
        String PC = "pc";
        /**
         * 微信小程序
         */
        String WX = "wx";
        /**
         * 应用程序
         */
        String APP = "app";
    }

    /**
     * 操作系统
     */
    interface OsType{
        Integer LINUX = 1;
        Integer WINDOWS = 2;
        /**
         * 苹果
         */
        Integer MAC = 3;
        Integer UNIX = 4;
        /**
         * 银河麒麟
         */
        Integer YHQL = 5;
        /**
         * 统信UOS
         */
        Integer TXUOS = 6;
        /**
         * 深度Deepin
         */
        Integer SD = 7;
        /**
         * 华为欧拉
         */
        Integer OULA = 8;
        /**
         * 中兴新支点
         */
        Integer ZXXZD = 10;
        /**
         * 红旗
         */
        Integer HQ = 11;
        /**
         * 华为鸿蒙HarmonyOS
         */
        Integer HARMONY = 12;
        /**
         * 中标麒麟
         */
        Integer ZBQL = 13;
        Integer OTHER = 9;

        Map<Integer, String> MAP = new HashMap<Integer, String>(){{
            put(LINUX, "linux");
            put(WINDOWS, "windows");
            put(MAC, "mac");
            put(UNIX, "unix");
            put(YHQL, "银河麒麟");
            put(TXUOS, "统信UOS");
            put(SD, "深度Deepin");
            put(OULA, "华为欧拉");
            put(ZXXZD, "中兴新支点");
            put(HQ, "红旗");
            put(HARMONY, "华为鸿蒙HarmonyOS");
            put(ZBQL, "中标麒麟");
            put(OTHER, "其他");
        }};
    }

    /**
     * 使用状态
     */
    interface Use {
        /**
         * 使用
         */
        Integer USE = 1;
        /**
         * 停用
         */
        Integer STOP = 9;
    }

    /**
     * IP地址是否内网
     */
    interface IpInternal {
        /**
         * 内网
         */
        Integer INTERNAL = 1;
        /**
         * 外网，外网则外部可以访问
         */
        Integer EXTERNAL = 2;
    }

    /**
     * 项目状态
     */
    interface ProjectState {
        /**
         * 立项
         */
        Integer APPROVAL = 1;
        /**
         * 研发
         */
        Integer DEV = 2;
        /**
         * 部署
         */
        Integer DEPLOYMENT = 3;
        /**
         * 维护
         */
        Integer MAINTENANCE = 4;
        /**
         * 废弃
         */
        Integer DISCARD = 99;
    }
    /**
     * 应用状态
     */
    interface AppState {
        /**
         * 立项
         */
        Integer APPROVAL = 1;
        /**
         * 开发
         */
        Integer DEV = 2;
        /**
         * 维护
         */
        Integer MAINTENANCE = 4;
        /**
         * 废弃
         */
        Integer DISCARD = 99;
    }

    /**
     * 应用类型
     */
    interface AppType {
        /**
         * app
         */
        Integer APP = 1;
        /**
         * 前端
         */
        Integer WEB = 2;
        /**
         * 后端
         */
        Integer JAVA = 3;
        /**
         * 小程序
         */
        Integer APPLET = 4;
    }

    /**
     * 重要性等级
     */
    interface Importance {
        /**
         * 辅助项目，可有可无
         */
        Integer AUXILIARY = 1;
        /**
         * 普通项目
         */
        Integer ORDINARY = 2;
        /**
         * 重点项目，需要保证质量、响应的
         */
        Integer IMPORTANT = 3;
        /**
         * 核心项目
         */
        Integer CORE = 4;
    }

    /**
     * 维护状态
     */
    interface MaintenanceStatus {
        /**
         * 维护中
         */
        Integer CONTINUOUS = 1;
        /**
         * 已弃用
         */
        Integer STOP = 2;
    }

    /**
     * 问题出现的频率
     */
    interface ProblemFrequency {
        /**
         * 低
         */
        Integer LOW = 1;
        /**
         * 中
         */
        Integer CENTRE = 2;
        /**
         * 高
         */
        Integer HIGH = 3;
        /**
         * 必然出现
         */
        Integer INEVITABLE_OCCURRENCE = 4;
    }

    /**
     * 驻点类型
     */
    interface StagnationPointType {
        /**
         * 长期驻点
         */
        Integer LONG_TERM = 1;
        /**
         * 临时调配
         */
        Integer TEMP = 2;
    }

    /**
     * 环境
     */
    interface Environment {
        /**
         * 测试
         */
        Integer TEST = 1;
        /**
         * 开发
         */
        Integer DEV = 2;
        /**
         * 生产
         */
        Integer PRO = 3;
    }

    /**
     * 故障等级
     */
    interface FaultLevel {
        /**
         * 致命
         */
        Integer FATAL = 1;
        /**
         * 严重
         */
        Integer SERIOUS = 2;
        /**
         * 普通
         */
        Integer ORDINARY = 2;
        /**
         * 轻微
         */
        Integer SLIGHT = 4;
    }

    /**
     * 故障类型
     */
    interface FaultType {
        /**
         * bug
         */
        Integer BUG = 1;
        /**
         * 安全
         */
        Integer SECURED = 2;
        /**
         * 网络异常
         */
        Integer NETWORK = 3;
    }

    /**
     * 解决问题状态
     */
    interface SolutionStatus {
        /**
         * 提交后第一个状态，等待确认
         */
        Integer REPORTED = 10;
        /**
         * 问题依旧存在，重新处置
         */
        Integer STILL = 11;
        /**
         * 接受到问题，确认问题存在
         */
        Integer CONFIRM = 20;
        /**
         * 开始处理问题
         */
        Integer DISPOSE = 30;
        /**
         * 问题已修复
         */
        Integer REPAIR = 40;
        /**
         * 准备验证
         */
        Integer VERIFY_INIT = 50;
        /**
         * 验证中
         */
        Integer VERIFY_RUN = 51;
        /**
         * 问题存在
         */
        Integer EXIST = 90;
        /**
         * 已修复
         */
        Integer SUCCESS = 91;
        /**
         * 非问题，配置等错误导致的
         * 或者需求明确的
         */
        Integer NOT_BUG = 92;

    }

    /**
     * 上传的文件类型
     */
    interface FileType {
        /**
         * 文本文件
         */
        Integer TXT = 1;
        /**
         * 图片文件
         */
        Integer IMG = 2;
        /**
         * 音频文件
         */
        Integer MP3 = 3;
        /**
         * 视频文件
         */
        Integer MP4 = 4;
    }

    /**
     * 是否临时文件，临时文件默认会在48小时后删除
     */
    interface TempFile {
        /**
         * 默认值，临时文件
         */
        Integer TEMP = 0;
        /**
         * 生产，已经进入生产环境
         */
        Integer PRODUCTION = 1;
        /**
         * 生产，已经进入生产环境，但被标记要删除的-会进行物理删除
         * 这种是延迟一段时间后删除
         */
        Integer PRODUCTION_DEL = 2;
        /**
         * 已经进入生产
         * 但因为是逻辑删除，不希望删除掉原始文件，这个标记就是数据已删除。
         * 是否使用 del_type 来做，其他都走物理删除流程
         */
        // Integer PRODUCTION_DEL_LOGIC = 3;
    }

    /**
     * 文件资源类型，是从哪个表来的
     */
    interface FileSourceType {
        /**
         * 组件图标
         */
        String COMPONENT_ICO = "1";
        /**
         * 场所图标
         */
        String SITE_ICO = "2";
        /**
         * 第三方
         */
        String THIRD_PARTY_ICO = "3";
        /**
         * 用户头像
         */
        String USER_ICO = "4";
        /**
         * 现场存储的文件
         */
        String SITE_FILE = "5";
        /**
         * 计算机的登录认证-Markdown
         * @see OpsComputerServer#getAccess1() getAccess2()  getAccess3()
         */
        String ACCESS = "6";
        /**
         * 组件版本相关的图片-Markdown
         */
        String COMPONENT_VERSION = "7";
        /**
         * 应用的图标
         */
        String APP = "8";
        /**
         * 应用 - 安装文档 - Markdown
         */
        String APP_INSTALL_DOC = "9";
        /**
         * 产品图标
         */
        String PRODUCT_ICO = "10";
        /**
         * 环境-访问信息，详情
         */
        String ENV_ACCESS_ICO = "11";
        /**
         * 部署-开始和启动 图片
         */
        String DEPLOY_START_END = "12";
        /**
         * 部署-过程 图片
         */
        String DEPLOY_PROCESS = "13";
        /**
         * 部署-验证 图片
         */
        String DEPLOY_VERIFICATION = "14";
        /**
         * 工具的图标
         */
        String TOOL_ICO = "15";
        /**
         * 工具安装的文档图片
         */
        String TOOL_INSTALL_DOC = "16";
        /**
         * 工具部署-开始和启动 图片
         */
        String TOOL_DEPLOY_START_END = "17";
        /**
         * 工具部署-过程 图片
         */
        String TOOL_DEPLOY_PROCESS = "18";
        /**
         * 工具部署-验证 图片
         */
        String TOOL_DEPLOY_VERIFICATION = "19";
        /**
         * 厂商用户头像
         */
        String THIRD_PARTY_USER_ICO = "20";
        /**
         * 产品问题-解决方案
         */
        String SOLUTION_TO = "21";
        /**
         * 产品问题-问题详情
         */
        String PROBLEM_DETAILED = "22";
        /**
         * 知识库内容
         */
        String KNOWLEDGE_CONTENT = "23";
        /**
         * 干系人头像
         */
        String STAKEHOLDER_ICO = "24";
    }

    /**
     * 场所阶段
     */
    interface SiteStage {
        /**
         * 启动阶段，准备中
         */
        Integer INIT = 1;
        /**
         * 招投标阶段
         */
        Integer TENDERING = 2;
        /**
         * 开发阶段
         */
        Integer DEV = 3;
        /**
         * 实施部署阶段
         */
        Integer DEPLOY = 4;
        /**
         * 运维阶段
         */
        Integer MAINTENANCE = 9;
    }

    /**
     * 是文件还是目录
     */
    interface FileOrDir {
        /**
         * 是文件
         */
        Integer FILE = 1;
        /**
         * 目录
         */
        Integer DIR = 2;
    }

    /**
     * 目录或文件的重要性
     */
    interface ComputerFileCore {
        /**
         * 高
         */
        Integer HIGH = 1;
        /**
         * 中
         */
        Integer SCHOOL = 2;
        /**
         * 低
         */
        Integer LOW = 3;
    }

    /**
     * 组件版本类型
     */
    interface ComponentVersionType {
        /**
         * 主版本
         * 公司推荐的版本，并且其他的版本会复制它的基本信息,主版本只能有一个
         */
        Integer MAIN = 1;
        /**
         * 普通版本
         */
        Integer GENERAL = 2;
        /**
         * 禁用版本
         * 不推荐使用的版本，可能存在某种缺陷
         */
        Integer DISABLE = 3;
    }

    /**
     * 产品依赖类型
     */
    interface ProductDependType {
        /**
         * 产品依赖产品，比如公司的核心产品
         */
        Integer PROJECT = 1;
        /**
         * 应用
         */
        Integer APP = 2;
        /**
         * 组件
         */
        Integer COMPONENT = 3;
    }

    /**
     * 环境类型
     */
    interface EnvType {
        /**
         * 演示环境
         */
        Integer DEMONSTRATE = 1;
        /**
         * 开发环境
         */
        Integer DEV = 2;
        /**
         * 生产环境
         */
        Integer PROD = 3;
        /**
         * 测试环境
         */
        Integer TEST = 4;
        /**
         * 预发布
         */
        Integer BEFORE = 5;
        /**
         * 其他
         */
        Integer OTHER = 99;
    }

    /**
     * 部署类型
     */
    interface OpsDeployType {
        /**
         * 应用
         */
        Integer APP = 1;
        /**
         * 组件
         */
        Integer COMPONENT = 2;
        /**
         * 工具
         */
        // Integer TOOL = 3;
    }

    /**
     * 工具类型
     */
    interface ToolType {
        /**
         * 项目管理
         */
        Integer PROJECT_MANAGEMENT = 1;
        /**
         * 代码管理
         */
        Integer CODE_MANAGEMENT = 2;
        /**
         * 其他
         */
        Integer OTHER = 9;
    }

    /**
     * 项目问题状态
     */
    interface ProductQuestionStatus {
        /**
         * 开放中
         * 问题仍在处理流程中，可能处于不同的阶段，但尚未完成
         */
        Integer OPEN = 1;
        /**
         * 已关闭
         * 问题已经彻底解决，不再需要进一步处理
         */
        Integer CLOSE = 2;
        /**
         * 已过时
         * 问题已经不再相关或不再需要处理，可能是因为环境变化、问题不再存在或优先级调整
         */
        Integer OBSOLETE = 3;
    }

    /**
     * 时间线等级
     */
    interface TimeLineLevel {
        /**
         * 普通事件
         */
        Integer ORDINARY = 1;
        /**
         * 重要事件
         */
        Integer IMPORTANT = 2;
        /**
         * 核心事件
         */
        Integer CORE = 3;
    }

    /**
     * 知识点状态
     */
    interface KnowledgeStatus {
        /**
         * 过时
         */
        Integer OUTDATED = 1;
        /**
         * 发布
         */
        Integer OPEN = 2;
    }

    /**
     * 密码状态
     */
    interface PasswordStatus {
        /**
         * 使用中
         */
        Integer USE = 1;
        /**
         * 已废弃
         */
        Integer OBSOLETE = 2;
    }

    /**
     * 级别
     */
    interface StakeholderLevel {
        /**
         * 高
         */
        String HIGH = "high";
        /**
         * 中
         */
        String MIDDLE = "middle";
        /**
         * 低
         */
        String LOW = "low";
    }

    /**
     * 环境账号访问信息 重要性
     */
    interface EnvAccountPeculiar {
        /**
         * 特权
         */
        Integer PRIVILEGE = 0;
        /**
         * 管理员
         */
        Integer ADMIN = 1;
        /**
         * 一般
         */
        Integer GENERAL = 2;
    }

    /**
     * 环境账号访问信息 绑定类型
     */
    interface EnvAccountBindType {
        /**
         * 环境
         */
        Integer ENV = 0;
        /**
         * 场所
         */
        Integer SITE = 1;
        /**
         * 组件
         */
        Integer COMPONENT = 2;
        /**
         * 工具
         */
        Integer TOOL = 3;
        /**
         * 应用
         */
        Integer APP = 4;
    }

    /**
     * 快捷入口
     */
    interface QuickAccessType {
        /**
         * 场所
         */
        Integer SITE = 1;
        /**
         * 应用
         */
        Integer APP = 2;
        /**
         * 产品
         */
        Integer PRODUCT = 3;
    }
}
